From 8b10455f4df5050b4fe5dd77277d035e1d39ec40 Mon Sep 17 00:00:00 2001 From: DannyS712 Date: Tue, 16 Jul 2019 21:57:51 +0000 Subject: [PATCH] Add talk namespace option to Special:NewPages Bug: T47133 Change-Id: Ie263e9cb956cc9efe734ccc5832df350d005e5d9 --- includes/specials/SpecialNewpages.php | 9 +++++ includes/specials/pagers/NewPagesPager.php | 41 ++++++++++++++++------ 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/includes/specials/SpecialNewpages.php b/includes/specials/SpecialNewpages.php index 04db7040dc..711d4474fa 100644 --- a/includes/specials/SpecialNewpages.php +++ b/includes/specials/SpecialNewpages.php @@ -56,6 +56,7 @@ class SpecialNewpages extends IncludableSpecialPage { $opts->add( 'feed', '' ); $opts->add( 'tagfilter', '' ); $opts->add( 'invert', false ); + $opts->add( 'associated', false ); $opts->add( 'size-mode', 'max' ); $opts->add( 'size', 0 ); @@ -229,6 +230,7 @@ class SpecialNewpages extends IncludableSpecialPage { $username = $this->opts->consumeValue( 'username' ); $tagFilterVal = $this->opts->consumeValue( 'tagfilter' ); $nsinvert = $this->opts->consumeValue( 'invert' ); + $nsassociated = $this->opts->consumeValue( 'associated' ); $size = $this->opts->consumeValue( 'size' ); $max = $this->opts->consumeValue( 'size-mode' ) === 'max'; @@ -251,6 +253,13 @@ class SpecialNewpages extends IncludableSpecialPage { 'default' => $nsinvert, 'tooltip' => 'invert', ], + 'nsassociated' => [ + 'type' => 'check', + 'name' => 'associated', + 'label-message' => 'namespace_association', + 'default' => $nsassociated, + 'tooltip' => 'namespace_association', + ], 'tagFilter' => [ 'type' => 'tagfilter', 'name' => 'tagfilter', diff --git a/includes/specials/pagers/NewPagesPager.php b/includes/specials/pagers/NewPagesPager.php index 5788bb2bac..8131671a53 100644 --- a/includes/specials/pagers/NewPagesPager.php +++ b/includes/specials/pagers/NewPagesPager.php @@ -22,6 +22,8 @@ /** * @ingroup Pager */ +use MediaWiki\MediaWikiServices; + class NewPagesPager extends ReverseChronologicalPager { /** @@ -50,9 +52,6 @@ class NewPagesPager extends ReverseChronologicalPager { $conds = []; $conds['rc_new'] = 1; - $namespace = $this->opts->getValue( 'namespace' ); - $namespace = ( $namespace === 'all' ) ? false : intval( $namespace ); - $username = $this->opts->getValue( 'username' ); $user = Title::makeTitleSafe( NS_USER, $username ); @@ -65,14 +64,6 @@ class NewPagesPager extends ReverseChronologicalPager { } } - if ( $namespace !== false ) { - if ( $this->opts->getValue( 'invert' ) ) { - $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace ); - } else { - $conds['rc_namespace'] = $namespace; - } - } - if ( $user ) { $conds[] = ActorMigration::newMigration()->getWhere( $this->mDb, 'rc_user', User::newFromName( $user->getText(), false ), false @@ -84,6 +75,8 @@ class NewPagesPager extends ReverseChronologicalPager { $conds[] = ActorMigration::newMigration()->isAnon( $rcQuery['fields']['rc_user'] ); } + $conds = array_merge( $conds, $this->getNamespaceCond() ); + # If this user cannot see patrolled edits or they are off, don't do dumb queries! if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) { $conds['rc_patrolled'] = RecentChange::PRC_UNPATROLLED; @@ -130,6 +123,32 @@ class NewPagesPager extends ReverseChronologicalPager { return $info; } + // Based on ContribsPager.php + function getNamespaceCond() { + $namespace = $this->opts->getValue( 'namespace' ); + if ( $namespace === 'all' || $namespace === '' ) { + return []; + } + + $namespace = intval( $namespace ); + $invert = $this->opts->getValue( 'invert' ); + $associated = $this->opts->getValue( 'associated' ); + + $eq_op = $invert ? '!=' : '='; + $bool_op = $invert ? 'AND' : 'OR'; + + if ( !$associated ) { + return [ "rc_namespace $eq_op " . $this->mDb->addQuotes( $namespace ) ]; + } + + $associatedNS = MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociated( $namespace ); + return [ + "rc_namespace $eq_op " . $this->mDb->addQuotes( $namespace ) . + $bool_op . + " rc_namespace $eq_op " . $this->mDb->addQuotes( $associatedNS ) + ]; + } + function getIndexField() { return 'rc_timestamp'; } -- 2.20.1